package com.sjm.learn.lock;

/**
 * @Description:synchronized使用场景
 * @Author：shenjm25081
 * @Date：13:26 2019-2-21
 */
public class SynchronizedDemo2 {

    /**
     * 实例方法
     *      被锁的对象：类的实例对象
     */
    public synchronized void method1(){}

    /**
     * 静态方法:
     *      被锁的对象：类对象
     */
    public static synchronized void method2(){}

    public void method3(){
        /**
         * 代码块
         *      实例对象：
         *          被锁的对象：类的实例对象
         */
        synchronized (this){}
    }

    public void method4(){
        /**
         * 代码块
         *      class对象:
         *          被锁的对象：类对象
         */
        synchronized (SynchronizedDemo2.class){}
    }

    public void method5(){
        /**
         * 代码块
         *      任意实例对象Object:
         *          被锁的对象：实例对象Object
         */
        String lock = ""; //String对象作为锁
        synchronized (lock){
            System.out.print("mm");
        }
    }

    public static void main(String[] args){
        SynchronizedDemo2 demo = new SynchronizedDemo2();
        demo.method5();
    }
}
